Introduction to Design Patterns